전체 포스트

타입 별칭

타입 별칭에 대해 살펴봅니다
2/21/2023 작성

개요

안녕하세요 이정환입니다 😃

이번에는 타입 어노테이션에 이어 타입을 선언하는 또 다른 방법인 타입 별칭에 대해 살펴봅니다.

타입 별칭

타입 별칭(Type Alias)은 마치 변수를 선언하듯 타입을 선언할 수 있도록 해주는 타입스크립트의 기능입니다.

COPY
type MyType = number;

이렇게 type 타입 이름 = 타입 형태로 타입을 선언하는 것을 타입 별칭이라고 합니다.

타입 별칭을 선언하면 다음과 같이 타입 어노테이션에 별칭 이름을 사용할 수 있습니다.

COPY
type MyType = number;

let num1: MyType = 1;
let num2: MyType = 2;

변수 num1과 num2에 타입을 MyNumber로 선언했습니다. MyNumber는 number 타입의 별칭으로 선언되었기 때문에 결과적으로 num1, num2는 number 타입으로 선언됩니다.

참고로 let으로 선언한 변수 처럼 동일한 이름의 별칭을 두개를 선언하는 것은 불가능합니다.

COPY
type MyType = number;
type MyType = string; // 오류 : MyType 식별자가 중복되었습니다.

또 타입 별칭은 마치 변수처럼 블록 스코프를 갖습니다.

COPY
type MyType = number;

function func() {
  type MyType = string;
  let num: MyType = "hello";}

let num: MyType = 1;

① 의 변수 num의 타입은 글로벌 스코프에 선언한 타입 별칭에 따라 number 타입이 됩니다. 반면 ②의 변수 num의 타입은 이 변수가 속한 func 함수 블록 스코프 내부에 선언한 타입 별칭에 따라 string 타입이 됩니다.

여러모로 타입 별칭은 let을 이용한 변수 선언과 참 많이 닮았습니다.

타입 별칭을 사용하는 이유

타입 별칭은 왜 사용하는 걸까요? 예를 들어 다음과 같이 복잡한 객체 타입이 필요한 경우 동일한 타입을 여러번 선언하기 어려운 경우가 있습니다.

COPY
let userA: {
  name: string;
  age: number;
} = {
  name: "이정환",
  age: 27,
};

let userB: {
  name: string;
  age: number;
} = {
  name: "김 아무개",
  age: 22,
};

let userC: {
  name: string;
  age: number;
} = {
  name: "임 아무개",
  age: 32,
};

userA, userB, userC 모두 동일한 객체 타입을 갖습니다. 그러나 이렇게 동일한 모양의 객체 타입을 일일히 어노테이션으로 선언하니 의미없이 반복되는 코드가 너무 많아지게 되어 좋지 못한 코드가 탄생합니다.

이럴 때 타입 별칭을 이용하면 다음과 같이 깔끔하게 코드를 작성할 수 있습니다.

COPY
type Person = {
  name: string;
  age: number;
};

let userA: Person = {
  name: "이정환",
  age: 27,
};

let userB: Person = {
  name: "김 아무개",
  age: 22,
};

let userC: Person = {
  name: "임 아무개",
  age: 32,
};

이렇듯 타입 별칭을 이용하면 동일한 타입 어노테이션을 반복 작성하지 않을 수 있습니다.